package cevent.source.cloudcenter.server.service;

import cevent.source.cloudcenter.server.domain.RolesResources;
import cevent.source.cloudcenter.server.domain.RolesResourcesExample;
import cevent.source.cloudcenter.server.dto.PageDto;
import cevent.source.cloudcenter.server.dto.RolesResourcesDto;
import cevent.source.cloudcenter.server.mapper.RolesResourcesMapper;
import cevent.source.cloudcenter.server.util.DuplicateUtil;
import cevent.source.cloudcenter.server.util.UUID8Util;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import javax.annotation.Resource;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * @author cevent
 * @description 角色资源管理表服务层
 */
@Service
public class RolesResourcesService {
    private static final Logger LOG=LoggerFactory.getLogger(RolesResourcesService.class);
    @Resource
    private RolesResourcesMapper rolesResourcesMapper;

    //1.无分页列表查询：dto获取domain参数
    public List<RolesResourcesDto> rolesResourcesDtoList(){
        RolesResourcesExample rolesResourcesExample = new RolesResourcesExample();
        rolesResourcesExample.setOrderByClause("uni_id asc");
        List<RolesResources> rolesResourcesList=rolesResourcesMapper.selectByExample(rolesResourcesExample);
        List<RolesResourcesDto> rolesResourcesDtoList = new ArrayList<RolesResourcesDto>();
        for(int i=0;i<rolesResourcesList.size();i++){
            RolesResources rolesResources=rolesResourcesList.get(i);
            RolesResourcesDto rolesResourcesDto=new RolesResourcesDto();
            //复制拷贝(source,target)
            BeanUtils.copyProperties(rolesResources,rolesResourcesDto);
            rolesResourcesDtoList.add(rolesResourcesDto);
        }
        return rolesResourcesDtoList;
    }

    /*2.分页查询：pageDto保存数据
        list数据集合：listPageData
        当前页码：currentPage
        每页行数：size
        总计函数：totalSize
        前端可返回pageDto，无需返回值
     */
    public void getRolesResourcesPageDtoList(PageDto pageDto){
        //1.分页设置（前端传入当前页和每页行数params），起始页，每页行数size
        PageHelper.startPage(pageDto.getCurrentPage(),pageDto.getSize());

        RolesResourcesExample rolesResourcesExample=new RolesResourcesExample();


        List<RolesResources> rolesResourcesList=rolesResourcesMapper.selectByExample(rolesResourcesExample);
        //2.将mapper查询结果复制到pageInfo
        PageInfo<RolesResources> pageInfo=new PageInfo<>(rolesResourcesList);
        //3.pageInfo计算处理处理=>后分页的总行数set到pageDto做记录
        pageDto.setTotalSize(pageInfo.getTotal());

        List<RolesResourcesDto> rolesResourcesDtoList=new ArrayList<>();
        rolesResourcesList.stream().forEach(rolesResources->{
            RolesResourcesDto rolesResourcesDto=new RolesResourcesDto();
            BeanUtils.copyProperties(rolesResources,rolesResourcesDto);
            rolesResourcesDtoList.add(rolesResourcesDto);
        });

        pageDto.setListPageData(rolesResourcesDtoList);

    }

    //3.新增、修改rolesResources，将传入的id转为rolesResources对象本身
    public void save(RolesResourcesDto rolesResourcesDto){
        RolesResources rolesResources= DuplicateUtil.copy(rolesResourcesDto,RolesResources.class);
        if(StringUtils.isEmpty(rolesResourcesDto.getUniId())){
            this.insert(rolesResources);
        }else{
            this.update(rolesResources);
        }

    }

    //4.删除模块
    public void delete(String uniId){
        RolesResourcesExample rolesResourcesExample=new RolesResourcesExample();
        rolesResourcesMapper.deleteByPrimaryKey(uniId);
    }

    //5.向外暴露dto，不暴露实体类：插入数据
    private void insert(RolesResources rolesResources){
        rolesResources.setUniId(UUID8Util.getShortUUID());

        try {
        Date now =new Date();
        String date=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(now);
        long time=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(date).getTime();
        int timeInt=(int)(time/1000);

        } catch (ParseException e) {
            e.printStackTrace();
        }
        rolesResourcesMapper.insert(rolesResources);
    }

    //6.更新模块
    private void update(RolesResources rolesResources){
        try {
            Date now =new Date();
            String date=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(now);
            long time=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(date).getTime();
            int timeInt=(int)(time/1000);

        } catch (ParseException e) {
            e.printStackTrace();
        }

        rolesResourcesMapper.updateByPrimaryKey(rolesResources);
    }
    //7.根据roleId获取资源
    public List<RolesResourcesDto> getInfoResources(String roleId){
        RolesResourcesExample rolesResourcesExample=new RolesResourcesExample();
        //通过创建条件criteriaExample来指定查询的id
        rolesResourcesExample.createCriteria().andRolesIdEqualTo(roleId);
        List<RolesResources> rolesResources=rolesResourcesMapper.selectByExample(rolesResourcesExample);
        return DuplicateUtil.copyList(rolesResources,RolesResourcesDto.class);
    }
}
